﻿using System;

namespace swe.Core
{
	public interface IStateMachineBuilder<T, TR>
	{
		/// <summary>
		/// States the specified state name.
		/// </summary>
		/// <param name="stateName">Name of the state.</param>
		/// <param name="func">The func.</param>
		/// <param name="stateType">Type of the state.</param>
		/// <returns></returns>
		IStateMachineBuilder<T, TR> State(string stateName, Func<IStateMachineController<T, TR>, T, StateResult> func, StateType stateType = StateType.Statble);

		/// <summary>
		/// Binds the state machine to an input instanse
		/// </summary>
		/// <param name="initialObj">The initial obj.</param>
		/// <returns></returns>
		IStateMachine<TR> BindTo(T initialObj);
	}
}